package notes.java.java8.demo;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

// 核心函数接口
public class J3_TestFunctionalInterface {

	// Consumer消费型接口   特点：有去无回，有参数无返回值
	public static void happy(double money, Consumer<Double> consumer) {
		consumer.accept(money);
	}
	
	// Supplier 供给型接口   特点：提供型的，无参数有返回值
	public static int get(Supplier<Integer> supplier) {
		return supplier.get();
	}
	
	// Function函数型接口 特点：有参数和返回值
	public static String substring(String s, Function<String, String> fun) {
		return fun.apply(s);
	}
	
	// Predicate断言型的，用于判断，布尔型返回值
	public static boolean test(String x, Predicate<String> pre) {
		return pre.test(x);
	}
	
	public static void main(String[] args) {
		// 1 Consumer消费型接口  特点：有去无回，有参数无返回值
		happy(200.0f, (x)->{
			System.out.println("消费了：" + x);
		});
		
		// 2、Supplier 供给型接口   特点：提供型的，无参数有返回值
		int res = get(()->10);
		System.out.println(res); 
		
		// 3、Function函数型接口 特点：有参数和返回值
		String str = substring("abcdefg", (s)->s.substring(0, 2));
		System.out.println(str);
		
		// 4、Predicate断言型的，用于判断，布尔型返回值
		boolean flag = test("abcedf", (x)->x.contains("abc"));
		System.out.println(flag);
	}
}
